
from myproject.DataManage.DataTable import batch_insert_items_to_mysql

class MyprojectPipeline:
    def __init__(self):
        self.batch_size = 100  # 每 100 条执行一次批量插入
        self.items_buffer = []  # 缓存 item

    def process_item(self, item, spider):#类名无所谓，在settings中指定即可，函数名称固定
        # 不做任何存储，只输出
        # 打印每一条抓取的数据
        #print("抓取到的数据：")
        #print("=" * 50)
        #for key, value in item.items():
            #print(f"{key}: {value}")
        #print("=" * 50)
        #insert_item_to_mysql(item)#逐个插入非常影响性能，用批量插入


        # 将 item 加入缓冲区
        self.items_buffer.append(dict(item))  # 转为普通字典

        # 当缓冲区达到指定大小时，执行批量插入
        if len(self.items_buffer) >= self.batch_size:
            self._flush()

        return item

    def close_spider(self, spider):
        """爬虫关闭时，确保剩余数据也被写入"""
        if self.items_buffer:
            self._flush()
    def _flush(self):
        """执行批量插入并清空缓冲区"""
        if not self.items_buffer:
            return
        try:
            batch_insert_items_to_mysql(self.items_buffer)
        except Exception as e:
            # 可以选择记录日志或重试
            print(f"[ERROR] 批量插入失败: {e}")
            raise
        finally:
            self.items_buffer.clear()